﻿/*
另类二进制数 
Time Limit:1000MS  Memory Limit:32768K


Description:
当我们要用十进制数表达二进制数的时候，使用如下的实例转换：

100112＝1*24+0*23+0*22+1*21+1*20

＝16+0+0+2+1

＝19

可是，有一种另类的二进制数，虽然也是逢2进位，但其允许各位上其中有一个可以是2，
其成数的规则暂且不论，它到十进制数的转换却以如下的实例说明：

101202’＝1*(25-1)+0*(24-1)+1*(23-1)+2*(22-1)+0*(21-1)

＝31+0+7+6+0

＝44

该另类二进制数的前10个数为0, 1, 2, 10, 11, 12, 20, 100, 101, 102，显然与3进制数不同，它的增1操作是以先消去存在的2为前提的，即将2变成0，而直接进位。若所有的位都是0或1，它才从个位开始增值。因此，这种数的操作优点是，加1时最多只有一次进位，因而在某些应用上很有用。

你的任务是编程将另类二进制数转换成十进制数。

　


Input:
输入数据中有一些行，每行中有一个数（位长≤31），若为0，则表示输入结束，
否则就表示非负的另类二进制数。 
Output:
对于每个另类二进制数，输出其等价的十进制数，其十进制数最大不会超过2^31-1。 
Sample Input:
10120
200000000000000000000000000000
10
1000000000000000000000000000000
11
100
11111000001110000101101102000
0
Sample Output:
44
2147483646
3
2147483647
4
7
1041110737
*/


#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int main()
{
	char binary[32];
	while (gets(binary) && strcmp(binary, "0"))
	{
		unsigned result=0, sum=0;
		for (char *p=binary; *p; ++p)
		{
			result=(result<<1)+(*p-'0');
			sum+=(*p-'0');
		}
		printf("%ld\n", (result<<1)-sum);
	}
	return 0;
}